Spring Boot CRUD: Create (Veri Ekleme) İşlemi Nasıl Yapılır?
Spring Boot uygulamasında veritabanına yeni bir kayıt eklemek (Create) için öncelikle bir Entity sınıfı ve Spring Data JPA'yı miras alan bir Repository oluşturmalısınız. REST API üzerinden gelen veriyi @PostMapping ve @RequestBody anotasyonları ile Controller katmanında yakaladıktan sonra, Service katmanındaki repository.save(entity) metodunu çağırarak veriyi veritabanına kalıcı olarak kaydedebilirsiniz. İşlem başarılı olduğunda 201 Created durum kodu dönülmesi en iyi pratiktir.
Bu yazıda, Spring Boot CRUD (Create, Read, Update, Delete) operasyonlarının ilki olan Create (Kayıt Ekleme) işlemini adım adım ele alacağız. Veri ekleme işlemini doğrudan Entity üzerinden yapmak yerine, güvenli ve sürdürülebilir bir mimari olan Controller → Service → Repository katmanları ve DTO (Data Transfer Object) kullanarak gerçekleştireceğiz.
1. Spring Boot Projesi Bağımlılıkları
Veritabanı işlemleri yapabilmek için Spring Initializr üzerinden projenizi oluştururken aşağıdaki bağımlılıkları (dependencies) eklediğinizden emin olun:
- Spring Web: RESTful endpoint'leri oluşturmak için.
- Spring Data JPA: Veritabanı işlemleri (ORM) için.
- PostgreSQL Driver (veya MySQL/H2): Veritabanı bağlantısı için.
- Lombok: Kod kalabalığını (boilerplate) önlemek için.
2. User Entity Sınıfının Oluşturulması
İlk olarak, veritabanındaki kullanıcı tablosunu temsil eden User sınıfımızı oluşturuyoruz. JPA ve Lombok kurallarına uygun temiz bir sınıf yazıyoruz.
@Entity
@Table(name = "users")
@Getter
@Setter
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String username;
@Column(unique = true, nullable = false)
private String email;
@Column(nullable = false)
private String password;
}
3. Repository Katmanı Oluşturma
Veritabanına kayıt atabilmek için JpaRepository'den miras alan bir interface oluşturuyoruz. Bu sayede save() gibi metotları sıfırdan yazmaktan kurtuluyoruz.
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// Veritabanı kayıt işlemi (Create) için save() metodu burada hazır bulunur.
}
4. Request DTO (Veri Transfer Nesnesi) Oluşturma
Kullanıcıdan gelen verileri (JSON) doğrudan veritabanı Entity'sine bağlamak güvenlik açıklarına (Over-posting) yol açabilir. Bu yüzden sadece ihtiyacımız olan alanları içeren bir DTO (Data Transfer Object) oluşturuyoruz.
@Getter
@Setter
public class UserRequest {
private String username;
private String email;
private String password;
}
5. Service Katmanı İş Mantığı
Service katmanı uygulamanın beynidir. Controller'dan gelen DTO'yu alır, bir Entity'ye çevirir (mapping) ve Repository'ye kaydedilmesi için gönderir. (Not: Modern projelerde Autowired yerine Constructor Injection kullanıyoruz).
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
@Transactional
public User saveUser(UserRequest request) {
// DTO'dan gelen veriyi Entity'ye dönüştürme (Mapping)
User user = new User();
user.setUsername(request.getUsername());
user.setEmail(request.getEmail());
user.setPassword(request.getPassword()); // Gerçek projelerde BCrypt ile şifrelenmelidir!
// Veritabanına kaydetme (Create operasyonu)
return userRepository.save(user);
}
}
6. Controller Katmanı (POST Endpoint)
Son olarak dış dünyadan gelecek olan HTTP isteklerini yakalayacak REST API ucunu (Endpoint) oluşturuyoruz. Veri ekleme işlemleri her zaman POST metodu ile yapılır.
@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@PostMapping
public ResponseEntity<User> createUser(@RequestBody UserRequest request) {
User savedUser = userService.saveUser(request);
// REST standartlarına göre yeni kaynak eklendiğinde 201 Created dönülür.
return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
}
}
7. Postman ile API Testi
Kodlarımızı yazdık, şimdi Postman ile POST isteği atarak veritabanına kayıt işlemini test edebiliriz.
İstek Türü: POST
URL: http://localhost:8080/api/users
Body (JSON):
{
"username": "testuser",
"email": "test@test.com",
"password": "my_secret_password"
}
İstek başarılı olursa sunucu size oluşturulan kaydı ve veritabanı tarafından otomatik atanan ID'yi içeren bir 201 Created yanıtı döndürecektir.
Sonuç
Bu yazıda Spring Boot CRUD Create işlemini güvenli ve katmanlı mimariye (Entity, DTO, Repository, Service, Controller) uygun olarak adım adım gerçekleştirdik.
Serinin diğer yazılarına göz atarak uygulamanızı tamamlayabilirsiniz: